// 32. 最长有效括号
// 给你一个只包含 '(' 和 ')' 的字符串，找出最长有效（格式正确且连续）括号子串的长度。

/**
 * @param {string} s
 * @return {number}
 */
var longestValidParentheses = function(s) {
  let result = 0

  // 栈内存放的是下标，而不是实际的值
  const stack = [-1] // 为什么栈底要放一个-1？

  for (let i = 0; i < s.length; i++) {
    if (s[i] === '(') {
      stack.push(i) // 左括号直接入栈
    } else {
      stack.pop()
      if (stack.length === 0) { // 为什么要判断一次空栈？
        stack.push(i)
      } else {
        // 每匹配到一次，都要重新算一次最大长度
        result = Math.max(result, i - stack[stack.length - 1])
      }
    }
  }
  return result
}

